www.gusucode.com > matlab最优化程序源码---书籍 > matlab最优化程序/光盘程序/第7章 无约束多维极值问题/minPowell.m
function [x,minf] = minPowell(f,x0,P,var,eps) format long; if nargin == 4 eps = 1.0e-6; end n = length(var)+1; syms l; while 1 y = zeros(size(P)); y(:,1) = x0; for i=1:n-1 yv = y(:,i) + l*P(:,i); fy = Funval(f, var,yv); [a,b] = minJT(fy,0,0.1); tl = minHJ(fy,a,b); y(:,i+1) = y(:,i) + tl*P(:,i); end P(:,n) = y(:,n) - y(:,1); if norm(P(:,n)) <= eps x = y(:,n); break; else for j=1:n FY(j) = Funval(f, var,y(:,j)); end maxDF = -inf; m = 0; for j=1:n-1 df = FY(j) - FY(j+1); if df > maxDF maxDF = df; m = j+1; end end tmpF = Funval(f, var,2*y(:,n)-y(:,1)); fl = FY(1) - 2*FY(n) + tmpF; if fl<2*maxDF yv = y(:,n) + l*P(:,n); fy = Funval(f, var,yv); [a,b] = minJT(fy,0,0.1); tl = minHJ(fy,a,b); x0 = y(:,n) + tl*P(:,n); P(:,m:(n-1)) = P(:,(m+1):n); else x0 = y(:,n); end end end minf = Funval(f,var,x); format short;